package com.ddzh.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ddzh.entity.Result;
import com.ddzh.mapper.CheckItemMapper;
import com.ddzh.pojo.CheckItem;
import com.ddzh.entity.PageReq;
import com.ddzh.entity.PageRes;
import com.ddzh.pojo.Setmeal;
import com.ddzh.service.CheckItemService;
import com.ddzh.service.SetmealService;
import org.apache.dubbo.config.annotation.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class CheckItemServiceImpl extends ServiceImpl<CheckItemMapper,CheckItem> implements CheckItemService {

    @Resource
    private SetmealService setmealService;

    @Override
    public PageRes<CheckItem> findByPage(PageReq pageReq) {
        PageRes<CheckItem> pageRes = new PageRes<>();

        //当前页面信息，这里应该用实现类，不用多态，为什么呢因为Page实现了
        Page<CheckItem> page = new Page<>();
        page.setCurrent(pageReq.getCurrentPage());
        page.setSize(pageReq.getPageSize());

        //查询条件
        QueryWrapper<CheckItem> queryWrapper=new QueryWrapper<>();
            //查询is_delete标志为0的项
        queryWrapper.eq("is_delete",0);
        queryWrapper.orderByDesc("id");//通过id降序排序=》大号在前使得新增数据放在前面
            //如果查询条件不为null，根据name模糊查询
        if (pageReq.getQueryString()!=null && "".equals(pageReq.getQueryString().trim())==false) {
            queryWrapper.like("name", pageReq.getQueryString());
        }

        //执行分页查询：核心查询方法
        IPage<CheckItem> iPage = this.page(page, queryWrapper);

        //将IPage类型转换为自定义的返回结果类型
        pageRes.setList(iPage.getRecords());
        pageRes.setTotal(iPage.getTotal());

        return pageRes;
    }

    @Override
    public boolean deleteById(Long itemId) {
        /**
         * 删除时，需要判断该项是否被套餐 / 检查组使用=》通过检查项id查询套餐是否存在
         * select sgt.setmeal_id setmeal_id
         * from check_item_t i
         * left join check_group_item_t cgit  on cgit.item_id=i.id
         * left join setmeal_group_t sgt on cgit.group_id=sgt.group_id
         * left join setmeal_t st on sgt.setmeal_id=st.id
         * where i.id=1;
         */
        //查询对应检查组是否存在
        Setmeal setmeal = setmealService.findByItemId(itemId);
        if(setmeal!=null && setmeal.getIs_delete()==0){
//            throw new RuntimeException("当前检查项不能被删除，有套餐正在使用");
            return false;
        }
        //没有被使用就可以删除
        CheckItem checkItem = new CheckItem();
        checkItem.setId(itemId);
        checkItem.setIs_delete(1);
        //根据id更新数据，没有set的字段不会被更新
        return this.updateById(checkItem);
    }

    @Override
    public List<CheckItem> getDetail(Long groupId) {
        return this.baseMapper.getDetail(groupId);
    }

    @Override
    public boolean saveOrUpdateItem(CheckItem checkItem) {
        //项目编码，名称唯一，
        //根据编码查询是否存在
        //判断检查项是否存在
        if (checkItem.getId()==0){//添加
            if (this.baseMapper.findByCode(checkItem.getCode())!=null){
                return false;
            }
            if (this.baseMapper.findByName(checkItem.getName())!=null){
                return false;
            }
        }
        return this.saveOrUpdate(checkItem);
    }
}
